package com.pactera.madp.cp.controller.oms.beta;

import com.pactera.madp.common.core.util.R;
import com.pactera.madp.cp.api.dto.beta.WorkNewsGroupDTO;
import com.pactera.madp.cp.api.dto.beta.WorkOriginalDTO;
import com.pactera.madp.cp.api.entity.beta.WorkOriginalEntity;
import com.pactera.madp.cp.api.vo.beta.WorkNewsGroupVO;
import com.pactera.madp.cp.api.vo.beta.WorkOriginalVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pactera.madp.cp.service.WorkNewsGroupService;
import com.pactera.madp.cp.service.WorkOriginalService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author Deming.Chang
 * @title 资讯管理-控制层
 * @date 2022-06-14
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/news")
@Api(value = "news", tags = "资讯管理")
public class WorkNewsController {

    /**
     * 资讯分组业务服务定义
     */
    private final WorkNewsGroupService groupService;
    private final WorkOriginalService originalService;

    /**
     * 获取资讯一级分组（栏目）
     * @return
     */
    @ApiOperation(value ="获取资讯一级分组（栏目）")
    @GetMapping("/groups/first")
    public R<List<WorkNewsGroupVO>> getFirstGroupList(){
        return R.ok(groupService.getFirstGroupList());
    }

    /**
     * 添加资讯分组（栏目）
     * @param dto 资讯分组-数据传输对象
     * @return
     */
    @ApiOperation(value ="添加资讯分组（栏目）")
    @PostMapping("/group")
    public R<Boolean> save(@RequestBody WorkNewsGroupDTO dto){
        return R.ok(groupService.saveGroups(dto));
    }

    /**
     * 修改资讯分组详情（栏目）
     * @return
     */
    @ApiOperation(value ="更新资讯分组详情（栏目）")
    @PutMapping("/group")
    public R<Boolean> update(@RequestBody WorkNewsGroupDTO dto){
        return R.ok(groupService.updateGroups(dto));
    }

    /**
     * 删除资讯分组（栏目）
     * @return
     */
    @ApiOperation(value ="删除资讯分组（栏目）")
    @DeleteMapping("/group/{groupId}")
    public R<Boolean> delete(@PathVariable Integer groupId){
        return R.ok(groupService.delGroups(groupId));
    }

    /**
     * 查询资讯信息（列表）
     * @return
     */
    @ApiOperation(value ="查询资讯信息（列表）")
    @GetMapping("/info/list")
    public R<Page<WorkOriginalVO>> getWorkOriginalList(Page page,WorkOriginalDTO dto){
        return R.ok(originalService.getWorkOriginalList(page, dto));
    }

    /**
     * 上架资讯信息（列表）
     * @return
     */
    @ApiOperation(value ="上架资讯信息（列表）")
    @PutMapping("/info-putOn")
    public R<Boolean> putOnInfo(String newsKey){
        return R.ok(originalService.putOnWorkOriginal(newsKey));
    }

    /**
     * 撤销资讯信息（列表）待审批
     * @return
     */
    @ApiOperation(value ="撤销资讯信息（列表）")
    @PutMapping("/info-revo")
    public R<Boolean> revoInfo(String newsKey){
        return R.ok(originalService.revokeWorkOriginal(newsKey));
    }

    /**
     * 下架资讯信息（列表）已发布
     * @return
     */
    @ApiOperation(value ="下架资讯信息（列表）")
    @PutMapping("/info-down")
    public R<Boolean> downInfo(String newsKey){
        return R.ok(originalService.downWorkOriginal(newsKey));
    }

    /**
     * 审批资讯信息（列表）
     * @retur
     */
    @ApiOperation(value ="审批资讯信息（列表）")
    @PutMapping("/info-approval")
    public R<Boolean> approvalInfo(String newsKey, String opinion, Integer state){
        if (state != 1 && state != 2) {
            return R.failed("审批状态不在可操作范围[1-拒绝、2-同意]内");
        }
        WorkOriginalEntity entity = new WorkOriginalEntity();
        return R.ok(originalService.ApprovalWorkOriginal(entity,newsKey,opinion,state));
    }

    /**
     * 新增资讯信息（列表）
     * @retur
     */
    @ApiOperation(value ="新增资讯信息（列表）")
    @PostMapping("/info")
    public R<Boolean> saveInfo(@RequestBody WorkOriginalDTO dto){
        return R.ok(originalService.saveInfo(dto));
    }

    /**
     * 更新资讯信息（列表）
     * @retur
     */
    @ApiOperation(value ="更新资讯信息（列表）")
    @PutMapping("/info")
    public R<Boolean> updateInfo(@RequestBody WorkOriginalDTO dto){
        return R.ok(originalService.updateInfo(dto));
    }

    /**
     * 删除资讯信息（列表）
     * @retur
     */
    @ApiOperation(value ="删除资讯信息（列表）")
    @DeleteMapping("/info")
    public R<Boolean> deleteInfo(String newsKey){
        return R.ok(originalService.deleteInfo(newsKey));
    }

}
